package com.clarence.dada.modular.system.role.controller;

import com.clarence.dada.core.base.PageResult;
import com.clarence.dada.core.base.Result;
import com.clarence.dada.modular.system.role.entity.req.SysRoleReq;
import com.clarence.dada.modular.system.role.entity.resp.SysRoleDropDownResp;
import com.clarence.dada.modular.system.role.entity.resp.SysRoleResp;
import com.clarence.dada.modular.system.role.service.SysRoleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 系统角色控制器
 *
 * @author GD
 * @since 2020/11/5 上午10:19
 */
@RestController
@RequestMapping("/system/sysRole/")
@Tag(name = "角色管理", description = "角色管理Controller")
public class SysRoleController {

    @Resource
    private SysRoleService sysRoleService;

    /**
     * 添加系统角色
     *
     * @author GD
     * @since 2020/11/5 上午10:38
     */
    @Operation(summary = "系统角色_增加", description = "增加角色")
    @PostMapping("roleAdd")
    public Result<Void> roleAdd(@RequestBody @Validated(SysRoleReq.add.class) SysRoleReq req) {
        sysRoleService.roleAdd(req);
        return Result.SUCCESS;
    }

    /**
     * 删除系统角色
     *
     * @author GD
     * @since 2020/11/5 上午10:48
     */
    @Operation(summary = "系统角色_删除", description = "删除角色")
    @PostMapping("roleDelete")
    public Result<Void> roleDelete(@RequestBody @Validated(SysRoleReq.delete.class) SysRoleReq req) {
        sysRoleService.roleDelete(req);
        return Result.SUCCESS;
    }

    /**
     * 编辑系统角色
     *
     * @author GD
     * @since 2020/11/5 上午10:49
     */
    @Operation(summary = "系统角色_编辑", description = "编辑系统角色")
    @PostMapping("roleEdit")
    public Result<Void> roleEdit(@Validated(SysRoleReq.edit.class) SysRoleReq req) {
        sysRoleService.roleEdit(req);
        return Result.SUCCESS;
    }

    /**
     * <p>
     * 获取系统角色详情
     * <p>
     *
     * @param sysRoleReq id主键
     * @return 系统角色响应实例
     * @author GD
     * @since 2024/1/9
     */
    @Operation(summary = "系统角色_详情", description = "获取系统角色详情")
    @GetMapping("roleDetail")
    public Result<SysRoleResp> roleDetail(@Validated(SysRoleReq.detail.class) SysRoleReq req) {
        return new Result<>(sysRoleService.roleDetail(req));
    }

    /**
     * 搜索系统角色列表(分页)
     *
     * @author GD
     * @since 2020/11/5 上午10:19
     */
    @Operation(summary = "系统角色_查询列表(分页)", description = "搜索系统角色查询列表(分页)")
    @GetMapping("rolePage")
    public Result<PageResult<SysRoleResp>> rolePage(SysRoleReq req) {
        return new Result<>(sysRoleService.rolePage(req));
    }
//
//    /**
//     * 角色授权资源
//     *
//     * @author GD
//     * @since 2020/11/22 19:51
//     */
//    @Operation(summary = "系统角色_授权资源", description = "授权角色资源")
//    @PostMapping("grantResource")
//    public Result<Void> grantResource(@RequestBody @Validated(SysRoleVo.grantResource.class) SysRoleVo sysRoleVo) {
//        sysRoleResourceService.grantResource(sysRoleVo);
//        return Result.SUCCESS;
//    }
//
//    /**
//     * 角色授权菜单和按钮
//     *
//     * @author GD
//     * @since 2021/1/9 18:04
//     */
//    @Operation(summary = "系统角色_授权菜单和按钮", description = "授权角色菜单和按钮")
//    @PostMapping("grantMenuAndButton")
//    public Result<Void> grantMenuAndButton(@RequestBody @Validated(SysRoleVo.grantMenuButton.class) SysRoleVo sysRoleVo) {
//        sysRoleService.grantMenuAndButton(sysRoleRequest);
//        return Result.SUCCESS;
//    }
//
//    /**
//     * 角色授权菜单，新版界面用
//     *
//     * @author GD
//     * @since 2021/8/11 9:58
//     */
//    @Operation(summary = "系统角色_授权菜单", description = "授权角色菜单")
//    @PostMapping("grantMenu")
//    public Result<Void> grantMenu(@RequestBody @Validated(SysRoleVo.grantMenu.class) SysRoleVo sysRoleVo) {
//        sysRoleService.grantMenu(sysRoleVo);
//        return Result.SUCCESS;
//    }
//
//    /**
//     * 角色绑定或取消绑定菜单和按钮
//     *
//     * @author GD
//     * @since 2021/8/11 9:58
//     */
//    @Operation(summary = "系统角色_绑定或取消菜单和按钮", description = "绑定或取消角色菜单和按钮")
//    @PostMapping("grantMenusAndButtons")
//    public Result<List<MenuAndButtonTreeResponse>> grantMenusAndButtons(@RequestBody @Validated(SysRoleVo.grantMenusAndButtons.class) SysRoleVo sysRoleVo) {
//        return new Result<>(sysRoleService.grantMenusAndButtonsAndGetResult(sysRoleVo));
//    }
//
//

    /**
     * 系统角色列表下拉（用于用户授权角色时选择）
     *
     * @author GD
     * @since 2020/11/6 13:49
     */
    @Operation(summary = "系统角色_列表(下拉)", description = "列表（下拉）角色")
    @GetMapping("roleDropDown")
    public Result<List<SysRoleDropDownResp>> roleDropDown() {
        return new Result<>(sysRoleService.roleDropDown());
    }
//
//    /**
//     * 拥有菜单
//     *
//     * @author GD
//     * @since 2020/11/5 上午10:58
//     */
//    @Operation(summary = "系统角色_拥有菜单", description = "角色拥有菜单")
//    @PostMapping("getRoleMenus")
//    public Result<List<Long>> getRoleMenus(@Validated(SysRoleVo.detail.class) SysRoleVo sysRoleVo) {
//        Long roleId = sysRoleVo.getRoleId();
//        return new Result<>(sysRoleService.getMenuIdsByRoleIds(ListUtil.toList(roleId)));
//    }
//
//    /**
//     * 拥有数据
//     *
//     * @author GD
//     * @since 2020/11/5 上午10:59
//     */
//    @Operation(summary = "系统角色_拥有数据", description = "角色拥有数据")
//    @PostMapping("getRoleDataScope")
//    public Result<List<Long>> getRoleDataScope(@Validated(SysRoleVo.detail.class) SysRoleVo sysRoleVo) {
//        return new Result<>(sysRoleService.getRoleDataScope(sysRoleVo));
//    }
//
//    /**
//     * 获取角色下拉列表
//     *
//     * @author GD
//     * @since 2022/6/8 14:57
//     */
//    @Operation(summary = "系统角色_角色下拉列表", description = "角色下拉列表")
//    @PostMapping("getRoleSelectList")
//    public Result<List<SysRoleDto>> getRoleSelectList(SysRoleReq sysRoleReq) {
//        return new Result<>(sysRoleService.getRoleSelectList(sysRoleReq));
//    }
//
//    /**
//     * 获取角色信息集合
//     *
//     * @author GD
//     * @since 2022/11/2 14:08
//     */
//    @Operation(summary = "系统角色_获取信息集合", description = "获取角色信息集合")
//    @PostMapping("getRoleSelectList")
//    public Result<List<SysRoleDto>> getRoleInfoListByIds(@RequestBody @Validated(SysRoleVo.batchQuery.class) SysRoleVo sysRoleVo) {
//        return new Result<>(sysRoleService.getRolesByIds(sysRoleVo.getRoleIdList()));
//    }

}
